﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Text;
using DataLayer.dbml;
using DataLayer.Controller;


public partial class services_CaseComment : cGlobal
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        { 
            //Se trae la info del caso
            this.hdnIdCasoSF.Value = Request.QueryString["idCaso"].ToString();
            //this.hdnIdCasoSF.Value = "500Q0000002vmKO";
            this.getCase(this.hdnIdCasoSF.Value.ToString());
        }
    }

    private void getCase(string idCase)
    {
        DataSet dts = CaseController.GetCaseById(idCase);
        if (dts.Tables[0].Rows.Count > 0)
        {
            this.lblNumeroCaso.Text = dts.Tables[0].Rows[0]["numero_caso"].ToString();
            this.lblPrioridad.Text = dts.Tables[0].Rows[0]["prioridad"].ToString();
            this.lblEstado.Text = dts.Tables[0].Rows[0]["estado"].ToString();
            this.lblFechaApertura.Text = dts.Tables[0].Rows[0]["fecha_apertura"].ToString();
            this.lblMotivo.Text = dts.Tables[0].Rows[0]["motivo_caso"].ToString();
            this.lblTipoCaso.Text = dts.Tables[0].Rows[0]["tipo_caso"].ToString();
            this.lblDescripcion.Text = dts.Tables[0].Rows[0]["descripcion"].ToString();
            this.lblProblemaEncontrado.Text = dts.Tables[0].Rows[0]["problema_encontrado"].ToString();
            this.lblAccionesCorrectivas.Text = dts.Tables[0].Rows[0]["acciones"].ToString();
            this.lblFechaCierre.Text = dts.Tables[0].Rows[0]["fecha_cierre"].ToString();

            //Si el caso es de tipo visita empresarial se muetsran otros datos
            if (dts.Tables[0].Rows[0]["tipo_caso"].ToString().ToUpper() == "CASO VISITA EMPRESARIAL")
            {
                this.lblFechaVisitaProgramada.Visible = true;
                this.lblFechaVisitaProgramadaValor.Text = dts.Tables[0].Rows[0]["fecha_visita"].ToString();
                this.lblDescripcion1.Visible = true;
                this.lblDescripcion1.Text = dts.Tables[0].Rows[0]["descripcion1"].ToString();
            }
            else
            {
                this.lblFechaVisitaProgramada.Visible = false;
                this.lblFechaVisitaProgramadaValor.Text = "";
                this.lblDescripcion1.Visible = false;
                this.lblDescripcion1.Text = "";
            }

            this.Grid1.DataSource = dts.Tables[1];
            this.Grid1.DataBind();

            //Recorre los comentarios y construye el string que se mostrará en el textbox de comentarios
            //StringBuilder comentarios = new StringBuilder();
            //for (int i = 0; i < dts.Tables[1].Rows.Count; i++)
            //{
            //    comentarios.Append(dts.Tables[1].Rows[i]["persona_comentario"].ToString() + " - " + dts.Tables[1].Rows[i]["fecha_comentario"].ToString() + ":\r\n");
            //    comentarios.Append(dts.Tables[1].Rows[i]["comentario"].ToString() + "\r\n\r\n");
            //}
            
        }
    }

    protected void Grid1_RowDataBound(object sender, Obout.Grid.GridRowEventArgs e)
    {
        if (e.Row.RowType == Obout.Grid.GridRowType.DataRow)
        {
            HyperLink lnkCom = (HyperLink)e.Row.Cells[4].Controls[0].Controls[0].Controls[0].Controls[0].Controls[1];
            lnkCom.NavigateUrl = "Javascript:openShadowbox('" + urlPortal + "/services/ComentarioDetalle.aspx?idComentario=" + DataBinder.Eval(e.Row.DataItem, "id_comentario").ToString().Trim() + "','iframe','Comentario',540,330);";
        }
    }

    protected void btnCrearComentario_Click(object sender, ImageClickEventArgs e)
    {
        try
        {
            DataLayer.SForceCaseComment.parametrosComentarioCaso param = new DataLayer.SForceCaseComment.parametrosComentarioCaso();
            param.strIdComentarioSFDC = "";
            param.strNombreComentario = "Seguimiento desde la página web";
            param.dttFechaHoraComentario = DateTime.Now;
            //param.strTipoLlamada = "Seguimiento desde la página web";
            param.strPersonaRealizaComentario = "Cliente";
            //param.strIdCasoSFDC = this.hdnIdCasoSF.Value.ToString();
            param.strIdCasoSFDC = this.hdnIdCasoSF.Value.ToString();
            param.strDescripcion = this.txtAgregarComentario.Text.Trim();


            //SForceCaseComment.creacionComentarioRespuesta_cls respuesta = CCService.creaComentarioCaso_ws(param);
            DataLayer.SForceCaseComment.creacionComentarioRespuesta_cls respuesta = SFController.CrearComentarioCaso(param);

            if (respuesta.strEstadoTransaccion.Equals("Fallida"))
                this.lblMensaje.Text = "No se realizó la transacción: " + respuesta.strObservaciones;
            else
            {
                this.lblMensaje.Text = "El comentario ha sido creado";

                //Se crea el comentario en las tablas del portal
                COMENTARIOS_CASO comentario = new COMENTARIOS_CASO();
                comentario.ID_COMENTARIO = respuesta.strIdComentarioSFDC;
                comentario.DESCRIPCION = this.txtAgregarComentario.Text.Trim();
                //comentario.FECHA_COMENTARIO = respuesta.dateFechaTransaccion;
                comentario.FECHA_COMENTARIO = DateTime.Now;
                comentario.TIPO_COMENTARIO = "Comentarios Caso";
                comentario.ID_CASOSDFC = this.hdnIdCasoSF.Value.ToString();
                comentario.PERSONA_REALIZA_COMENTARIO = "Cliente";
                comentario.TIPO_LLAMADA = "Llamada Saliente";
                CaseCommentController.Insert(comentario);

                //Refresca grilla e info del caso
                this.getCase(this.hdnIdCasoSF.Value.ToString());
                this.txtAgregarComentario.Text = "";
                this.txtComentarioCierre.Text = "";
            }

            //Registra log de transacciones
            LOG_TRANSACCION objLog = new LOG_TRANSACCION();
            objLog.TIPO_TRANSACCION = respuesta.strTipoTransaccion;
            objLog.ELEMENTO_ENVIADO = DataLayer.Utilities.Utilidades.Serializar(param);
            objLog.ESTADO = respuesta.strEstadoTransaccion;
            objLog.OBSERVACION = respuesta.strObservaciones;
            objLog.ENVIOS = 1;
            LogTransactionController.Insert(objLog);

            //this.lblMensaje.Text = "Estado de la transaccion: " + respuesta.strEstadoTransaccion + "<br/>";
            //this.lblMensaje.Text += "Observaciones: " + respuesta.strObservaciones + "<br/>";
            //this.lblMensaje.Text += "strIdComentarioSFDC: " + respuesta.strIdComentarioSFDC + "<br/>";
            //this.lblMensaje.Text += "dateFechaTransaccion: " + respuesta.dateFechaTransaccion.ToString() + "<br/>";
        }
        catch (Exception ex)
        {
            this.lblMensaje.Text = "No se pudo agregar el comentario: " + ex.Message;            
        }
    }

    protected void btnCerrarCaso_Click(object sender, ImageClickEventArgs e)
    {        
        try
        {
            DataLayer.SForceCaseClose.parametrosComentarioCaso param = new DataLayer.SForceCaseClose.parametrosComentarioCaso();
            param.dttFechaHoraComentario = DateTime.Now;
            param.dttFechaHoraComentarioSpecified = true;
            //param.strIdCasoSFDC = this.hdnIdCasoSF.Value.ToString();
            param.strIdCasoSFDC = this.hdnIdCasoSF.Value.ToString();
            param.strDescripcion = this.txtComentarioCierre.Text.Trim();
                       
            DataLayer.SForceCaseClose.creacionComentarioRespuesta_cls respuesta = SFController.CerrarCaso(param);            

            if (respuesta.strEstadoTransaccion.Equals("Fallida"))
                this.lblMensajeCierre.Text = "No se realizó la transacción: " + respuesta.strObservaciones;
            else
            {                
                //Se crea el comentario en las tablas del portal
                COMENTARIOS_CASO comentario = new COMENTARIOS_CASO();
                comentario.ID_COMENTARIO = respuesta.strIdComentarioSFDC;
                comentario.DESCRIPCION = this.txtComentarioCierre.Text.Trim();
                //comentario.FECHA_COMENTARIO = respuesta.dateFechaTransaccion;
                comentario.FECHA_COMENTARIO = DateTime.Now;
                comentario.TIPO_COMENTARIO = "Comentarios Caso";
                comentario.ID_CASOSDFC = this.hdnIdCasoSF.Value.ToString();
                comentario.PERSONA_REALIZA_COMENTARIO = "Cliente";
                comentario.TIPO_LLAMADA = "Llamada Saliente";
                CaseCommentController.Insert(comentario);

                //Se cierra el caso en las tablas del portal
                //CaseController.CerrarCaso(this.hdnIdCasoSF.Value.ToString());

                //Refresca grilla e info del caso
                this.getCase(this.hdnIdCasoSF.Value.ToString());

                this.lblMensajeCierre.Text = "El comentario ha sido creado";
                this.txtAgregarComentario.Text = "";
                this.txtComentarioCierre.Text = "";

            }

            //Registra log de transacciones
            LOG_TRANSACCION objLog = new LOG_TRANSACCION();
            objLog.TIPO_TRANSACCION = respuesta.strTipoTransaccion;
            objLog.ELEMENTO_ENVIADO = DataLayer.Utilities.Utilidades.Serializar(param);
            objLog.ESTADO = respuesta.strEstadoTransaccion;
            objLog.OBSERVACION = respuesta.strObservaciones;
            objLog.ENVIOS = 1;
            LogTransactionController.Insert(objLog);

        }
        catch (Exception ex)
        {
            this.lblMensajeCierre.Text = "No se pudo agregar el comentario: " + ex.Message;
        }
    }


}
